package org.example.project_12.service;

import org.example.project_12.dto.CreateDocumentDto;
import org.example.project_12.dto.DocumentDto;
import org.example.project_12.dto.UpdateDocumentDto;
import org.example.project_12.entity.Document;

import java.util.List;

public interface DocumentService {
    
    /**
     * 创建文档
     */
    DocumentDto createDocument(CreateDocumentDto createDocumentDto, Long authorId);
    
    /**
     * 根据ID获取文档详情
     */
    DocumentDto getDocumentById(Long documentId, Long userId);
    
    /**
     * 根据作者ID获取文档列表
     */
    List<DocumentDto> getDocumentsByAuthor(Long authorId, Long currentUserId);
    
    /**
     * 根据空间ID获取文档列表
     */
    List<DocumentDto> getDocumentsBySpace(Long spaceId, Long currentUserId);
    
    /**
     * 获取公开文档列表
     */
    List<DocumentDto> getPublicDocuments(Long currentUserId);
    
    /**
     * 根据标题搜索文档
     */
    List<DocumentDto> searchDocumentsByTitle(String title, Long currentUserId);
    
    /**
     * 更新文档
     */
    DocumentDto updateDocument(Long documentId, UpdateDocumentDto updateDocumentDto, Long userId);
    
    /**
     * 删除文档
     */
    boolean deleteDocument(Long documentId, Long userId);
    
    /**
     * 锁定文档（用于编辑）
     */
    boolean lockDocument(Long documentId, Long userId);
    
    /**
     * 解锁文档
     */
    boolean unlockDocument(Long documentId, Long userId);
    
    /**
     * 收藏文档
     */
    boolean favoriteDocument(Long documentId, Long userId);
    
    /**
     * 取消收藏文档
     */
    boolean unfavoriteDocument(Long documentId, Long userId);
    
    /**
     * 获取用户收藏的文档列表
     */
    List<DocumentDto> getFavoriteDocuments(Long userId);
    
    /**
     * 检查文档是否已被用户收藏
     */
    boolean isDocumentFavorited(Long documentId, Long userId);
    
    /**
     * 导出文档为TXT格式
     */
    String exportDocumentAsTxt(Long documentId, Long userId);
    
    /**
     * 管理员审核文档
     */
    boolean updateDocumentStatus(Long documentId, String status);
    /**
     * 查询待审核文档
     */
    List<DocumentDto> getDocumentsByStatus(String status);

    
    /**
     * 检查用户是否有权限访问文档
     */
    boolean hasPermissionToAccess(Long documentId, Long userId);
    
    /**
     * 检查用户是否有权限编辑文档
     */
    boolean hasPermissionToEdit(Long documentId, Long userId);
} 